<?php
/**
 * @package     nuo
 * @subpackage  nuo.route
 * @author      Nam Nguyen <nam.ngvan@gmail.com>
 * @version     1.0
 * @since       Apr 17, 2013
 */
class Nuo_Route_Default extends Nuo_Route_Abstract
{
	/**
	 * @access  public
	 * @param   Nuo_Request $request
	 * @param   array $parts
	 * @return  bool
	 */
	function match($request, $parts)
	{
		$fake = FALSE;

		$name = array_shift($parts);

		$router = Nuo::getRouter();

		$dir = $router -> getDir($name);
		/**
		 * @var string
		 */
		if (!$dir)
		{
			$module = $name;
			$dir = $router -> getDir();
		}
		else
		{
			$module = array_shift($parts);
		}

		if (!$module)
		{
			$module = 'core';
		}

		if (!Nuo::hasModule($module))
		{
			array_unshift($parts, $module);
			$module = 'core';
			$fake = TRUE;
		}

		$path = MODULE_DIR . $module . '/classes/' . $dir;

		$file = '';

		$name = '';

		do
		{
			$next = FALSE;

			if (($alc = array_shift($parts)) == FALSE)
			{
				$file .= '/index';
			}
			else
			{
				$file .= '/' . $alc;
			}

			if (file_exists($filename = $path . $file . '.class.php'))
			{
				require_once $filename;
				$name = $module . '/' . $dir . $file;
			}
			else
			if (file_exists($filename = $path . $file . '/index.class.php'))
			{
				require_once $filename;
				$name = $module . '/' . $dir . $file . '/index';
			}

			if (is_dir($path . $file))
			{
				$next = TRUE;
			}
		}
		while($next or $parts);

		if (!$name)
		{
			if (!$fake)
			{
				$name = $module . '/' . $dir . '/index';
			}
		}
		
		
		$class = inflect($name);

		if ($name)
		{
			$request -> setName($name);
			return TRUE;
		}

		return FALSE;
	}

}
